import { ApiProperty, ApiPropertyOptional } from '@midwayjs/swagger'
import { Rule, RuleType } from '@midwayjs/validate'

/**
 * 获取菜单列表传输对象
 */
export class FindMenuListDTO implements IFindMenuListDTO {
  @ApiPropertyOptional({ description: '菜单名称' })
  @Rule(RuleType.string().empty(''))
  menuName: string

  @ApiPropertyOptional({ description: '状态' })
  @Rule(RuleType.string().empty(''))
  status: string
}

/**
 * 添加菜单传输对象
 */
export class CreateMenuDTO implements ICreateMenuDTO {
  @ApiProperty({ description: '上级ID' })
  @Rule(RuleType.string().required().error(new Error('上级菜单不能为空')))
  parentId: string

  @ApiPropertyOptional({ description: '路由地址' })
  @Rule(RuleType.string().empty(''))
  path: string

  @ApiPropertyOptional({ description: '路由路径' })
  @Rule(RuleType.string().allow(null).empty(''))
  component: string

  @ApiPropertyOptional({ description: '跳转地址' })
  @Rule(RuleType.string().allow(null).empty(''))
  redirect: string

  @ApiPropertyOptional({ description: '未标号字段' })
  @Rule(RuleType.number().default(0))
  isFrame: number

  @ApiProperty({ description: '是否缓存' })
  @Rule(RuleType.number().default(0))
  isCache: number

  @ApiProperty({ description: '菜单类型' })
  @Rule(RuleType.string().required().error(new Error('菜单类型不能为空')))
  menuType: string

  @ApiProperty({ description: '菜单名称' })
  @Rule(RuleType.string().required().error(new Error('菜单名称不能为空')))
  menuName: string

  @ApiProperty({ description: '显示顺序' })
  @Rule(RuleType.number().required().error(new Error('显示排序不能为空')))
  orderNum: number

  @ApiProperty({ description: '是否显示' })
  @Rule(RuleType.string().default('0'))
  visible: string

  @ApiPropertyOptional({ description: '状态' })
  @Rule(RuleType.string().empty(''))
  status: string

  @ApiPropertyOptional({ description: '权限字段' })
  @Rule(RuleType.string().allow(null).empty(''))
  perms: string

  @ApiPropertyOptional({ description: '菜单图标' })
  @Rule(RuleType.string().empty(''))
  icon: string
}

/**
 * 更新菜单传输对象
 */
export class UpdateMenuDTO extends CreateMenuDTO {}
